package com.jt.controller;


import com.jt.pojo.ItemDesc;
import com.jt.service.ItemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.jt.mapper.ItemMapper;
import com.jt.pojo.Item;
import com.jt.vo.EasyUITable;
import com.jt.vo.SysResult;

@RestController
@RequestMapping("/item")
public class ItemController {
	
	@Autowired
	private ItemService itemService;
	
	@Autowired
	private ItemMapper ItemMapper;
	
	/**
	 * 业务: 根据分页要求展现商品列表.要求将最新最热门的商品首先给用户展现.
	 * url: url:'/item/query
	 * 参数: page=1&rows=20   page当前页    rows 记录数
	 * 返回值: EasyUITable
	 * 编码习惯: mapper-service-controller-页面js   手敲  自下而上的开发
	 * 课堂代码格式:
	 * 			url-controller-service-mapper      结构代码自动生成  自上而下开发
	 * 			
	 */
	@RequestMapping("/query")
	public EasyUITable findItemByPage(Integer page,Integer rows) {
		
		//调用业务层,获取商品分页信息
		return itemService.findItemByPage(page,rows);
	}

	/**
	 * 1.url地址: http://localhost:8091/item/save
	 * 2.请求参数: 整个form表单
	 * 3.返回值结果: SysResult对象
	 *
	 * 复习: 页面中的参数是如何通过SpringMVC为属性赋值???
	 * 分析: 页面参数提交 一般方式3种   1.form表单提交     2.ajax页面提交  3.a标签 参数提交
	 * 		 页面参数提交一般都会遵守协议规范 key=value
	 * 分析2: SpringMVC的底层实现servlet. 包含了2大请求对象 request对象/response对象
	 * 		  servlet如何获取数据?????
	 * 规则:  参数提交的名称与mvc中接受参数的名称必须一致!!!!
	 */
	//新增商品
	@RequestMapping("/save")
	public SysResult saveItem(Item item, ItemDesc itemDesc){
		itemService.saveItem(item,itemDesc);
		return SysResult.success();

		//因为定义了全局异常处理类，所以在此不用try{}catch{}
		/*  try {
			itemService.saveItem(item);
			return SysResult.success();
		}catch (Exception e){
			e.printStackTrace();
			return SysResult.fail();
		}
		 */
	}

	/**
	 * 完成商品信息修改
	 * 参数：整个商品表单
	 * 返回值为SysResult对象
	 */
	@RequestMapping("/update")
	public SysResult updateItem(Item item,ItemDesc itemDesc){
		itemService.updateItem(item,itemDesc);
		return SysResult.success();
	}


	//删除商品
	@RequestMapping("/delete")
	public SysResult deleteItem(Long[] ids) {
		/**
		 * 		方法1：使用MP进行删除
		 * 		List<Long> idList = Arrays.asList(ids);		//将数组转换成List集合
		 * 		ItemMapper.deleteBatchIds(idList);		//调用MP进行删除
		 */

		//自己手动写sql删除
		itemService.deleteItems(ids);
		return SysResult.success();
	}


	//restFul风格商品上架下架
	@RequestMapping("/updateStatus/{status}")
	public SysResult updateStatus(Long[] ids, @PathVariable Integer status) {

		//利用MP实现商品上架与下架
//		List<Long> idList = Arrays.asList(ids);	//转换为List集合
//		Item item = new Item();	//构建需要修改的内容
//		item.setStatus(status).setUpdated(new Date());
//        //定义修改操作的条件构造器 where id in ();
//		UpdateWrapper<Item> updateWrapper = new UpdateWrapper<>();
//		updateWrapper.in("id", idList);
//		ItemMapper.update(item,updateWrapper);

		//手动写sql语句实现商品上架与下架
		itemService.updateStatus(ids,status);
		return SysResult.success();
	}

	/**
	 * 业务:根据详情ID查询商品详情信息,之后在页面中回显.
	 * url地址:http://localhost:8091/item/query/item/desc/1474391973
	 * 参数:  包含在url中,利用restFul方式动态获取
	 * 返回值:  SysResult对象
	 */
	@RequestMapping("/query/item/desc/{itemId}")
	public SysResult findItemDescById(@PathVariable Long itemId){
		ItemDesc itemDesc = itemService.findItemDescById(itemId);
		return SysResult.success(itemDesc);
	}


}
